package entity

// AutoApprovalStrategy 自动审批策略类型
type AutoApprovalStrategy string

// 自动审批策略枚举
const (
	// AutoApprovalStrategyAdjacent 相邻策略：相同审批人连续在相邻的节点中出现才触发自动审批
	AutoApprovalStrategyAdjacent AutoApprovalStrategy = "ADJACENT"
	// AutoApprovalStrategyAny 任意策略：审批人只要出现就执行自动审批
	AutoApprovalStrategyAny AutoApprovalStrategy = "ANY"
)

// WorkflowTemplate 工作流模板
type WorkflowTemplate struct {
	ID   string `json:"id"`
	Name string `json:"name"`
	// StartNodeID 工作流开始的模板节点ID
	StartNodeTemplateID string `json:"startNodeTemplateId"`
	// EnableAutoApproval 是否启用自动审批功能
	EnableAutoApproval bool `json:"enableAutoApproval"`
	// AutoApprovalStrategy 自动审批策略
	AutoApprovalStrategy AutoApprovalStrategy `json:"autoApprovalStrategy"`
	// TimeoutAlertHours 工作流超时提醒时间（单位：小时）
	// 当节点创建时间超过此配置时长时，系统将发送超时提醒事件
	// 值为0表示不启用超时提醒功能
	TimeoutAlertHours int `json:"timeoutAlertHours"`
}

func (w WorkflowTemplate) IsValid() bool {
	return w.ID != ""
}

// NewWorkflowTemplate 创建工作流模板实体的工厂方法
func NewWorkflowTemplate(workflowTemplateID, name, startNodeTemplateID string, enableAutoApproval bool, autoApprovalStrategy AutoApprovalStrategy, timeoutAlertHours int) WorkflowTemplate {
	return WorkflowTemplate{
		ID:                   workflowTemplateID,
		Name:                 name,
		StartNodeTemplateID:  startNodeTemplateID,
		EnableAutoApproval:   enableAutoApproval,
		AutoApprovalStrategy: autoApprovalStrategy,
		TimeoutAlertHours:    timeoutAlertHours,
	}
}
